﻿/* 项目名称： ViewModelBase.cs
 * 命名空间： Vampirewal.Core.SimpleMVVM
 * 类 名 称: ViewModelBase
 * 作   者 : 杨程
 * 概   述 :
 * 创建时间 : 2021/2/20 18:35:09
 * 更新时间 : 2021/2/20 18:35:09
 * CLR版本 : 4.0.30319.42000
 * ******************************************************
 * Copyright@Administrator 2021 .All rights reserved.
 * ******************************************************
 */

namespace Vampirewal.Core.SimpleMVVM;

/// <summary>
/// ViewModel基类
/// </summary>
public partial class ViewModelBase : ObservableObject, IDisposable
{
    /// <summary>
    /// VMId
    /// </summary>
    public string VMId => Guid.NewGuid().ToString();

    /// <summary>
    /// 构造函数
    /// </summary>
    public ViewModelBase()
    {
        //InitData();
        //MessengerRegister();
    }

    /// <summary>
    /// 用于存储DialogWindow传递过来的窗体ID
    /// </summary>
    [ObservableProperty]
    private Guid viewId;

    /// <summary>
    /// 通过VM关闭窗体
    /// </summary>
    protected virtual void CloseView()
    {
        try
        {
            WindowsManager.GetInstance().CloseWindow(ViewId);
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    /// <summary>
    /// 标题
    /// </summary>
    [ObservableProperty]
    private string title = "未命名窗体";

    /// <summary>
    /// 当窗体是DialogShow的方式打开的时候，可以通过重写这个方法，将值传回主窗体
    /// </summary>
    /// <returns></returns>
    public virtual object GetResult()
    {
        return null;
    }

    /// <summary>
    /// 初始化页面数据，由ViewModelBase的构造函数调用，重写后不用再调用
    /// </summary>
    public virtual void InitData()
    {
    }

    /// <summary>
    /// 初始化页面数据，由创建时传递参数
    /// </summary>
    /// <param name="obj">传入参数</param>
    public virtual void PassData(object obj)
    {
    }

    /// <summary>
    /// 通用消息注册
    /// </summary>
    public virtual void MessengerRegister()
    {
    }

    /// <summary>
    /// 释放VM
    /// </summary>
    public virtual void DisposeViewModel()
    {

    }

    #region 命令

    /// <summary>
    /// 关闭窗体执行的命令
    /// </summary>
    [RelayCommand]
    public virtual void CloseWindow()
    {
    }



    #endregion 命令

    void IDisposable.Dispose()
    {
        DisposeViewModel();
    }
}